package io.gitee.luoyuan800.tool.llm.bean.config;

import lombok.Data;
import org.apache.commons.lang3.StringUtils;

@Data
public class AiAgentConfig {
    private ModelConfig modelConfig;
    private String system;
    private String model;
    private Double temperature = 0.3;
    private Double topP;
    private Double frequencyPenalty;
    private Double presencePenalty;
    private Double penaltyScore;
    private String responseFormat;
    private boolean stream = false;
    private Long maxToken ;
    private String stop;
    private boolean history = true;
    private Integer seed;
    private String assistantId;
    private String userId;
    /**
     * 搜索增强开关。
     * 未传值时默认关闭。
     * 开启后，走AI搜索，当 AI 搜索结果为空时，由大模型回复兜底话术。
     */
    private boolean webSearch;
    /**
     * 在值为 true 且命中搜索时，接口会返回搜索的结果
     */
    private boolean webSearchTrace;
    /**
     * 搜索引文角标开关。打开后，回答中命中搜索的结果会在片段后增加角标标志
     */
    private boolean webSearchCitation;
    /**
     * 是否开启深度研究该问题，默认是 false，在值为 true 且命中深度研究该问题时，会返回深度研究该问题信息。
     */
    private boolean enableThink = true;
    /**
     * 限定思维链的长度，目前Qwen支持这个设定
     */
    private Integer thinkBudget;
    /**
     * 多媒体开关。只适用混元大模型
     */
    private boolean enableMultimedia;
    /**
     * 推荐问答开关。混元大模型专属。
     * 说明：
     * 未传值时默认关闭。
     * 开启后，在返回值的最后一个包中会增加 recommended_questions 字段表示推荐问答， 最多返回3条。
     */
    private boolean enableRecommendedQuestions;


    public boolean isWebSearch(){
        return webSearch || webSearchTrace || webSearchCitation;
    }

    public String getUrl() {
        if (modelConfig == null) {
            return null;
        }
        if (StringUtils.isBlank(modelConfig.getFullUrl()) && StringUtils.isNotBlank(modelConfig.getBaseUrl())) {
            modelConfig.setFullUrl(modelConfig.getBaseUrl() + "/chat/completions");
        }
        return modelConfig.getFullUrl();
    }

    public String getModel() {
        if (modelConfig == null) {
            return model;
        }
        return modelConfig.getModel();
    }

    public String getToken() {
        return modelConfig != null ? modelConfig.getToken() : null;
    }
}
